(display "\n========================================\n")
; 最简单版本
(define (make-rat n d)
    (cons n d))
(display (make-rat 10 -20))
(newline)

(define (gcd a b)
    (if (= b 0)
        a
        (gcd b (remainder a b))))

; (display (gcd -20 -10))
; (newline)

; 约成最简分数
(define (make-rat n d)
    (let ((g (gcd n d)))
        (cons (/ n g) (/ d g))))

(display (make-rat 10 -20))
(newline)

; 规范化版本
(define (make-rat n d)
    (if (< d 0)
        (cons (- n) (- d))
        (cons n d)))

(display (make-rat 10 -20))
(newline)

; 规范化约分版本
(define (make-rat n d)
    (let ((g (gcd n d)))
        (if (< d 0)
            (cons (/ (- n) g) (/ (- d) g))
            (cons (/ n g) (/ d g)))))

(display (make-rat 10 -20))

(display "\n========================================\n")
